package com.ruoyi.tzai.mapper;

import java.util.Date;
import java.util.List;
import com.ruoyi.tzai.domain.TaskStep;
import org.apache.ibatis.annotations.Param;

/**
 * 任务步骤Mapper接口
 * 
 * @author tzai
 * @date 2025-11-12
 */
public interface TaskStepMapper 
{
    /**
     * 查询任务步骤
     * 
     * @param stepId 任务步骤主键
     * @return 任务步骤
     */
    public TaskStep selectTaskStepByStepId(Long stepId);

    /**
     * 查询任务步骤列表
     * 
     * @param taskStep 任务步骤
     * @return 任务步骤集合
     */
    public List<TaskStep> selectTaskStepList(TaskStep taskStep);

    /**
     * 根据任务ID查询所有步骤
     * 
     * @param taskId 任务ID
     * @return 任务步骤集合
     */
    public List<TaskStep> selectStepsByTaskId(Long taskId);

    /**
     * 根据任务ID和步骤名称查询步骤
     * 
     * @param taskId 任务ID
     * @param stepName 步骤名称
     * @return 任务步骤
     */
    public TaskStep selectStepByTaskIdAndName(@Param("taskId") Long taskId, 
                                               @Param("stepName") String stepName);

    /**
     * 新增任务步骤
     * 
     * @param taskStep 任务步骤
     * @return 结果
     */
    public int insertTaskStep(TaskStep taskStep);

    /**
     * 修改任务步骤
     * 
     * @param taskStep 任务步骤
     * @return 结果
     */
    public int updateTaskStep(TaskStep taskStep);

    /**
     * 删除任务步骤
     * 
     * @param stepId 任务步骤主键
     * @return 结果
     */
    public int deleteTaskStepByStepId(Long stepId);

    /**
     * 批量删除任务步骤
     * 
     * @param stepIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTaskStepByStepIds(Long[] stepIds);

    /**
     * 根据任务ID删除所有步骤
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public int deleteStepsByTaskId(Long taskId);

    /**
     * 更新步骤的输出数据(JSON字段更新)
     * 
     * @param stepId 步骤ID
     * @param jsonPath JSON路径
     * @param value 值
     * @return 结果
     */
    public int updateStepOutputDataField(@Param("stepId") Long stepId,
                                         @Param("jsonPath") String jsonPath,
                                         @Param("value") String value);

    /**
     * 删除指定时间之前的步骤
     * 
     * @param beforeDate 时间点
     * @return 删除数量
     */
    public int deleteStepsBefore(@Param("beforeDate") Date beforeDate);
}

